package jp.androidgroup.chiba.androidresearch.oauth;

import oauth.signpost.OAuth;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.OAuthProvider;
import android.app.Activity;
import android.net.Uri;
import android.os.AsyncTask;
import android.util.Log;

/**
 * Googleアカウントの認証画面（ブラウザ）から認証された情報をもとに、<br>
 * ユーザ情報を取得してSharedPreferencesに保存する処理を行うAsyncTaskです。
 * @author y-yamaguchi
 *
 */
public class RetrieveAccessTokenTask extends AsyncTask<Uri, Void, Void> {

	private final String TAG = "KARASAWA";

	private Activity _context;
	private OAuthProvider _provider;
	private OAuthConsumer _consumer;

	public RetrieveAccessTokenTask(Activity context, OAuthConsumer consumer,
			OAuthProvider provider) {
		_context = context;
		_consumer = consumer;
		_provider = provider;
	}

	/**
	 * Retrieve the oauth_verifier, and store the oauth and oauth_token_secret
	 * for future API calls.
	 */
	@Override
	protected Void doInBackground(Uri... params) {
		final Uri uri = params[0];
		final String oauth_verifier = uri
				.getQueryParameter(OAuth.OAUTH_VERIFIER);

		try {
			_provider.retrieveAccessToken(_consumer, oauth_verifier);

			SharedPreferencesManager spm = new SharedPreferencesManager(
					_context);
			spm.setOAuthInfo(_consumer);
			new OAuthGoogleAccounts().doGoogleAuth(_context, _consumer);
		} catch (Exception e) {
			Log.e(TAG, "OAuth - Access Token Retrieval Error", e);
		}
		return null;
	}

	@Override
	protected void onPostExecute(Void result) {
		// synchronizedしてみても同期とれなかったので、とりあえずAsyncTaskからfinish()しちゃいました・・・
		_context.finish();
	}
}